package jm.nj.demo08mian.demo01;

import java.util.LinkedList;

/*
 * LinkedList<E>实现 List 接口
 * LinkedList底层是一个双向列链表,增删块,查询慢
 * 双向链表:保证输入和取出的元素一致
 *
 * 有大量操作收尾的方法
 *       void addLast(E e) 将指定元素插入此列表的头
 *       void addLast(E e)将指定元素插入此列表的尾
 *       E getFirst()返回此列表的第一元素
 * E getLast() 返回此列表的最后一个元素。
 *	 E removeFirst() 移除并返回此列表的第一个元素。
 *	 E removeLast() 移除并返回此列表的最后一个元素。
 *	注意:使用子类特有的方法,不能使用多态
 *
 * */
public class Demo02LinkedList {
    public static void main(String[] args) {
        //methed_01();
        methed_02();
    }

    /*
     * E  gedFirst() 返回此列表的第一个元素
     * E getLast() 返回列表最后一个元素
     * boolean isEmpty () 如果列表不包含元素,则返回true
     *
     * 如果集合中没有元素则报:NoSuchElementException没有元素异常
     * */
    private static void methed_02() {
        LinkedList<String> linked = new LinkedList<String>();
        linked.add("www");
        linked.add("op");
        linked.add("oa");

        linked.clear();//清除

        //if (!linked.isEmpty()){
        if (linked.size() != 0) {
            String first = linked.getFirst();
            System.out.println("first:" + first);

            String last = linked.getLast();
            System.out.println("last:" + last);
        }
    }

    /*
     * void addFirst(E e) 将指定元素插入此列表的开头。
     * void push(E e) 将该元素插入此列表的开头。 此方法等效于 addFirst(E)。
     * void addLast(E e) 将指定元素添加到此列表的结尾。相当于 add(E e)
     * */
    private static void methed_01() {
        LinkedList<String> linke = new LinkedList<String>();
        /*linke.add("www");//往集合末尾追加
        linke.add("it");
        linke.add("cast");
        System.out.println(linke);

        linke.addFirst("我是头");
        System.out.println(linke);
        linke.addLast("我是尾");
        System.out.println(linke);*/

        linke.addFirst("1");
        linke.addFirst("2");
        linke.addFirst("3");
        linke.addLast("a");
        linke.addLast("b");
        linke.addLast("c");
        System.out.println(linke);
        linke.push("sdad");
        System.out.println(linke);
    }
}
